import request from '@/utils/request'

/**
 * 资料信息接口
 */
export interface Material {
  id: string
  name: string           // 资料名称
  description: string    // 资料描述
  url: string | null     // 文件URL，可能为空
  size: number           // 文件大小
  imageUrl: string | null // 图片url，可能为空
  // 前端展示需要的扩展字段
  fileSize?: number      // 用于显示的文件大小（来自size）
  type?: string          // 文件类型
  downloadCount?: number // 下载次数
  uploadTime?: string    // 上传时间
}

/**
 * 资料列表请求参数
 */
export interface MaterialQuery {
  page: number          // 当前页码
  size: number          // 每页数量
}

/**
 * 获取资料列表
 * @param params 查询参数
 * @returns 资料列表数据
 */
export const getMaterialList = (params: MaterialQuery) => {
  return request.post<any, {
    current_data: Material[]
    total_record: number
  }>('/api/material/list', params)
}

/**
 * 获取资料详情
 * @param id 资料ID
 * @returns 资料详细信息
 */
export const getMaterialDetail = (id: string) => {
  return request.get<Material>(`/api/material/materials/${id}`)
}

/**
 * 上传资料文件
 * @param file 文件
 * @returns 上传后的文件信息
 */
export const uploadMaterialFile = (file: File) => {
  console.log('开始上传文件:', file.name, '大小:', file.size)
  const formData = new FormData()
  formData.append('file', file)
  return request.post<any, {
    code: number,
    data: string,  // 这里的 data 直接是 URL 字符串
    msg: string | null
  }>('/api/material/upload_file', formData, {
    timeout: 60000, // 增加超时时间到60秒
    headers: {
      'Content-Type': 'multipart/form-data'
    },
  })
}

/**
 * 上传图片
 * @param file 文件
 * @returns 上传后的文件信息
 */
export const uploadMaterialImage = (file: File) => {
  const formData = new FormData()
  formData.append('file', file)
  return request.post<any, {
    code: number,
    data: string,  // 这里的 data 直接是 URL 字符串
    msg: string | null
  }>('/api/material/upload_img', formData)
}

/**
 * 添加新资料
 * @param data 资料数据
 * @returns 创建的资料信息
 */
export const addMaterial = (data: Partial<Material>) => {
  return request.post<any, Material>('/api/material/add', data)
}

// /**
//  * 删除资料文件
//  * @param id 资料ID
//  */
// export const deleteMaterialFile = (id: string) => {
//   return request.delete(`/api/material/${id}/files`)
// }

/**
 * 更新资料信息
 * @param id 资料ID
 * @param data 更新的数据
 * @returns 更新后的资料信息
 */
export const updateMaterial = (id: string, data: Partial<Material>) => {
  console.log('准备发送更新请求数据:', data)
  
  // 创建一个只包含后端需要的字段的对象
  const requestData = {
    name: data.name, 
    description: data.description,
    size: data.size,
    imageUrl: data.imageUrl
  }
  
  console.log('处理后的请求数据:', requestData)
  
  return request.put<Material>(`/api/material/${id}`, requestData, {
    headers: {
      'Content-Type': 'application/json'
    }
  })
}

/**
 * 删除资料
 * @param id 资料ID
 */
export const deleteMaterial = (id: string) => {
  return request.delete(`/api/material/materials/${id}`)
}

/**
 * 批量删除资料
 * @param ids 资料ID数组
 */
export const batchDeleteMaterials = (ids: string[]) => {
  return request.delete('/api/material/material/batch', { data: ids })
}
